import router from "./router";
import Cookies from "js-cookie";
import store from "./store";
import ZH from "./lang/zh";
import EN from "./lang/en";
import { Message } from "element-ui";
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
import { getToken } from "@/utils/auth"; // getToken from cookie
NProgress.configure({
  showSpinner: false,
}); // NProgress Configuration
// permission judge function
function hasPermission(roles, permissionRoles) {
  if (roles.indexOf("admin") >= 0) return true; // admin permission passed directly
  if (!permissionRoles) return true;
  return roles.some((role) => permissionRoles.indexOf(role) >= 0);
}
const whiteList = [
  "/login",
  "/auth-redirect",
  "/",
  "/search",
  "/404",
  "/query",
  "/401",
  "/addTask",
  "/task",
  "/message",
  "/addMessage",
  "/settings",
  "/task/addTask",
  "/task/viewTask",
]; // no redirect whitelist
router.beforeEach((to, from, next) => {
  // 根据中英文切换头部title文字
  // try {
  //   if (Cookies.get('language') == 'zh') {
  //     if (to.meta.title) {
  //       for (const key in ZH.route) {
  //         if (key == to.meta.title) {
  //           document.title = ZH.route[key];
  //           break;
  //         }
  //       }
  //     }
  //   }
  //   if (Cookies.get('language') == 'en') {
  //     if (to.meta.title) {
  //       for (const key in EN.route) {
  //         if (key == to.meta.title) {
  //           document.title = EN.route[key];
  //           break;
  //         }
  //       }
  //     }
  //   }
  // } catch (e) {
  //   document.title = '苏食安管理系统';
  // }
  if (to.meta.title) {
    document.title = to.meta.title;
  } else {
    document.title = "苏食安管理系统";
  }
  NProgress.start(); // start progress bar
  if (getToken() && false) {
    // determine if there has token
    /* has token*/
    if (to.path === "/login") {
      next({
        path: "/",
      });
      NProgress.done(); // if current page is dashboard will not trigger	afterEach hook, so manually handle it
    } else {
      // 第一次登陆的时候不要把roles存到vuex里去
      if (store.getters.roles.length === 0) {
        // 判断当前用户是否已拉取完user_info信息
        store
          .dispatch("GetUserInfo")
          .then((res) => {
            // 拉取user_info
            const roles = res.list.roles; // note: roles must be a array! such as: ['editor','develop']
            store
              .dispatch("GenerateRoutes", {
                roles,
              })
              .then(() => {
                // 根据roles权限生成可访问的路由表
                router.addRoutes(store.getters.addRouters); // 动态添加可访问路由表
                next({
                  ...to,
                  replace: true,
                }); // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
              });
          })
          .catch((err) => {
            store.dispatch("FedLogOut").then(() => {
              Message.error(err);
              next({
                path: "/",
              });
            });
          });
      } else {
        next();
        // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
        // if (hasPermission(store.getters.roles, to.meta.roles)) {
        //   next()
        // } else {
        //   next({
        //     path: '/401',
        //     replace: true,
        //     query: {
        //       noGoBack: true
        //     }
        //   })
        // }
        // 可删 ↑
      }
    }
  } else {
    if (to.query.userId) {
      sessionStorage.setItem("userId", to.query.userId);
    }
    if (to.query.token) {
      sessionStorage.setItem("token", to.query.token);
    }
    if (to.query.logname) {
      sessionStorage.setItem("logname", to.query.logname);
    }
    if (to.query.unitName) {
      sessionStorage.setItem("unitName", to.query.unitName);
    }
    if (to.query.areaCode) {
      sessionStorage.setItem("areaCode", to.query.areaCode);
    }
    // sessionStorage.setItem("areaCode", to.query.code||320500);
    
    // if (!sessionStorage.getItem("token") && to.path !== "/401") {
    //   return next(`/401`);
    // }

    next();
    /* has no token*/
    // if (whiteList.indexOf(to.path) !== -1) {
    //   // 在免登录白名单，直接进入
    //   next();
    // } else {
    //   NProgress.done(); // if current page is login will not trigger afterEach hook, so manually handle it
    //   next(`/404`);

    //   // next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
    //   //  return  next(`/login`) // 否则全部重定向到登录页
    // }
  }
});

router.afterEach(() => {
  NProgress.done(); // finish progress bar
});
